home *** CD-ROM | disk | FTP | other *** search
/ Windows Expert / Windows Expert.iso / windownt / cxxp4w.zip / SOURCE / FILE.CPP < prev    next >
C/C++ Source or Header  |  1993-03-11  |  2KB  |  102 lines

  1. #include "file.hpp"
  2.  
  3. extern "C" {
  4. #include <io.h>
  5. #include <sys\types.h>
  6. #include <sys\stat.h>
  7. #include <string.h>
  8. #include <dos.h>
  9. }
  10.  
  11. File::File(LPSTR pPath, WORD Style)
  12. {
  13.   struct stat FStatus;
  14.   int Fhnd;
  15.   WORD oStyle=Style;
  16.   if (oStyle==OF_EXIST) oStyle=OF_READ;
  17.   Fhnd=OpenFile((LPSTR)pPath,(LPOFSTRUCT)&OfStruct, oStyle);
  18.   if (Fhnd==-1) {
  19.     if(Style==OF_READ)Error(IDS_CANTREAD,(LPSTR)OfStruct.szPathName);
  20.     else if(Style==OF_CREATE)Error(IDS_CANTCREATE,(LPSTR)OfStruct.szPathName);
  21.     else if(Style==OF_WRITE)Error(IDS_CANTWRITE,(LPSTR)OfStruct.szPathName);
  22.     else if(Style==OF_READWRITE)Error(IDS_CANTOPEN,(LPSTR)OfStruct.szPathName);
  23.     FileSize=0;
  24.     bOpened=FALSE;
  25.   }
  26.   else {
  27.     FileSize=_llseek(Fhnd,0,2);   // seek to end
  28.     _llseek(Fhnd,0,0);          // seek back to start
  29.     _close(Fhnd);
  30.     bOpened=TRUE;
  31.   }
  32.   SeekPos=0;
  33. }
  34.  
  35. LPSTR File::Path()
  36. {
  37.   return (LPSTR)OfStruct.szPathName;
  38. }
  39.  
  40. DWORD File::Read(Memory * pMem, DWORD Size)
  41. {
  42.   Lock MemLock(pMem);
  43.   return Read((LPSTR)MemLock.Buffer,Size);
  44. }
  45.  
  46. DWORD File::Read(LPSTR pBuffer, DWORD Size)
  47. {
  48.   int Fhnd;
  49.   DWORD Result=0;
  50.   if (!FileSize|| !pBuffer || !bOpened) return 0;
  51.   Fhnd=OpenFile("",(LPOFSTRUCT)&OfStruct, OF_READ |OF_REOPEN);
  52.   if (Fhnd==-1) Error(IDS_CANTREAD,(LPSTR)OfStruct.szPathName);
  53.   else {
  54.     if(_llseek(Fhnd,SeekPos,0)==-1) return 0;
  55.     Result=_lread(Fhnd,pBuffer,Size);
  56.     _close(Fhnd);
  57.   }
  58.   SeekPos +=Result;
  59.   return Result;
  60. }
  61.  
  62. DWORD File::Write(Memory * pMem, DWORD Size)
  63. {
  64.   Lock MemLock(pMem);
  65.   return Write((LPSTR)MemLock.Buffer,Size);
  66. }
  67.  
  68. DWORD File::Write(LPSTR pBuffer, DWORD Size)
  69. {
  70.   int Fhnd;
  71.   DWORD Result=0;
  72.   if (!Size || !pBuffer || !bOpened) return 0;
  73.   Fhnd=OpenFile("",(LPOFSTRUCT)&OfStruct, OF_WRITE |OF_REOPEN);
  74.   if (Fhnd==-1) Error(IDS_CANTWRITE,(LPSTR)OfStruct.szPathName);
  75.   else {
  76.     if(_llseek(Fhnd,SeekPos,0)==-1) return 0;
  77.     Result=_lwrite(Fhnd,pBuffer,Size);
  78.     _close(Fhnd);
  79.   }
  80.   SeekPos +=Result;
  81.   if (SeekPos>FileSize) FileSize=SeekPos;
  82.   return Result;
  83. }
  84.  
  85. File& File::operator=(File& File2)
  86. {
  87.   DWORD BufSize=GlobalCompact(0);
  88.   if (BufSize>0x4000) BufSize=0x4000;
  89.   GlobalMem Mem(BufSize);
  90.   DWORD BytesRead=1;
  91.   while (BytesRead) {
  92.     BytesRead=File2.Read(&Mem,BufSize);
  93.     BytesRead=Write(&Mem,BytesRead);
  94.   }
  95.   return File2;
  96. }
  97.  
  98. DWORD File::Size()
  99. {
  100.   return FileSize;
  101. }
  102.